<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>继承1</title>
    <!-- 
        ES6之前并没有给我们提供 extends 继承。我们可以通过构造函数+原型对象模拟实现继承，
        被称为组合继承。
        call()方法
        调用这个函数, 并且修改函数运行时的 this 指向
        fun.call(thisArg,arg1,arg2,...)
        thisArg ：当前调用函数 this 的指向对象
        arg1，arg2：传递的其他参数
     -->
</head>
<body>
    
</body>
<script>
    // function fn(x,y) {
    //     console.log('我想和手磨咖啡');
    //     console.log(this);
    //     console.log(x + y);
    // }
    // var o = {
    //     name: 'andy'
    // }
    // fn.call(o,1,2)
    // fn();
    // 1. call() 可以调用函数
    // fn.call();
    // 2. call() 可以改变这个函数的this指向 此时这个函数的this 就指向了o这个对象
    // 借用构造函数继承父类型属性
    // 核心原理： 通过 call() 把父类型的 this 指向子类型的 this ，
    // 这样就可以实现子类型继承父类型的属性。
    function Person(uname,age,sex) {
        this.uname = uname
        this.age = age
        this.sex = sex
    }
    function Student(uname,age,sex,score) {
        Person.call(this,uname,age,sex)//实现父类的this指向子类的this,同时调用这个函数
        this.score = score
    }
    var smx = new Student('smx',20,'女',99)
    console.dir(smx)

</script>
</html>